package top.lishuoboy.javaweb.a05xml.xml2bean.bean;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonRootName;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import lombok.Data;

import java.time.Instant;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;

/**
 * @author lishuoboy 2018年6月25日 上午11:14:54
 */
@Data
//@XmlRootElement(name = "school")  // Jaxb必须此注解并指定根标签名字。此注解对Jackson、XStream无效也不需要
@JsonRootName("School2")                        // jackson  指定xml根标签的名字
@JacksonXmlRootElement(localName = "School")   // jackson  指定xml根标签的名字,优先级高于 @JsonRootName
public class School {
    // 1.JSON数值(XML不区分类型：数值、字符串、布尔)
    @JsonProperty("a11Byte")                    // jackson  指定字段的名字
    @JacksonXmlProperty(localName = "a11Byte")  // jackson  指定字段的名字,优先级高于 @JsonProperty
    private byte a11Byte;
    private short a12Short;
    private int a13Int;
    private long a14Long;
    private float a15Float;
    private double a16Double;

    // 2.JSON布尔(XML不区分类型：数值、字符串、布尔)
    private boolean a17Boolean;

    // 3.JSON字符串(XML不区分类型：数值、字符串、布尔)
    private char a18Char;                   // XStream1.4支持，JABX2.3转数值了
    // 3.1 java字符串转JSON字符串
    private String b1String;
    private StringBuffer b2StringBuffer;    // XStream1.4支持，JABX2.3不支持。bean转xml为空，xml转bean也为空
    private StringBuilder b3StringBuilder;  // XStream1.4支持，JABX2.3不支持。bean转xml为空，xml转bean也为空
    // 3.2 java日期转JSON字符串
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS", timezone = "GMT+8")  // jackson 指定日期格式,为json字符串
    private Date c1Date;                    // XStream1.4与JABX2.3格式不一致，一个本地时区，一个UTC
    private Instant c2Instant;              // XStream1.4支持，JABX2.3不支持。bean转xml为空（map的抛异常），xml转bean抛异常
    private LocalDateTime c3LocalDateTime;  // XStream1.4支持，JABX2.3不支持。bean转xml为空（map的抛异常），xml转bean抛异常

    // 4.JSON对象
    private Stu d1Stu;
    private LinkedHashMap d2Map;                      // XStream1.4友好支持，JABX2.3请指定泛型，否则xml很恶心
    private final String nullObj = null;

    // 5.JSON数组
    private int[] e1IntArr;
    private String[] e2StrArr;
    private Stu[] e3StuArr;
    private List e4List;                    // XStream1.4友好支持，JABX2.3请指定泛型，否则xml很恶心

    // 6.指定不序列化字段
    @JsonIgnore                     // jackson  指定不序列化字段
    private String f1NotSerializable;
}